package dev.ece.suit.loader;

import java.io.IOException;
import java.util.Map;

import dev.ece.core.cells.model.action.ActionManager.Action;
import dev.ece.util.lib.Vector3f;

public interface ModelLoader<T extends Number & Comparable<T>> {

	/**
	 * 读取文件，自动调用
	 * @throws Exception 
	 */
	public void load() throws IOException;
	
	/**
	 * 总时间，或总帧数
	 * @return
	 */
	public T total();
	
	/**
	 * 总帧数
	 * @return
	 */
	public int frameCount();
	
	/**
	 * 材质信息
	 * @return
	 */
	public Material[] getMaterials();
	
	/**
	 * 网格信息
	 * @return
	 */
	public Mesh[] getMeshes();
	
	/**
	 * 面信息
	 * @return
	 */
	public Face[] getFaces();
	
	/**
	 * 关节骨骼信息
	 * @return
	 */
	default Joint<T>[] getJoints() {
		return getUpdateJoints();
	}
	
	/**
	 * 需要更新的关节骨骼
	 * @return
	 */
	public Joint<T>[] getUpdateJoints();
	
	/**
	 * 渲染shader
	 * @return
	 */
	public ModelShader getModelShader();
	
	/**
	 * 深度渲染shader
	 * @return
	 */
	public ModelDepthShader getModelDepthShader();
	
	/**
	 * 添加一个从头到尾的动作
	 * @return
	 */
	public void addAction(Map<String, Action<T>> actions);
	
	/**
	 * 包围盒
	 * @return
	 */
	public Vector3f[] boundBox();
	
	/**
	 * 释放数据，自动调用
	 */
	public void dispose();
	
}
